package logica;
import java.util.ArrayList;
import javax.swing.JOptionPane;
/**
**********************************************************************************************<br/>
* Crea los vertices para la aplicacion
* @author Jefferson Amado Pe&ntilde;a Torres
**********************************************************************************************
* @see Asociacion
* @version 0.1
*/
public class Vertice{

	private String nombre; //nombre del nodo
	private ArrayList<Asociacion> enlaces; //Lista de enlaces que posee este nodo
	private int asociacionesExistentes; //cantidad de enlaces
	/**
	*Contructor de la clase que asigna el nombre 
	*@param newName Nombre del Vertice a crear
	*/
	public Vertice(String newName){
		nombre = newName;
		asociacionesExistentes = -1;
		enlaces = new ArrayList<Asociacion>();
	}
	/**
	*retorna todos las Asociaciones que tiene asociado un nodo
	*@return Lista de Asociaciones 
	*/
	public ArrayList<Asociacion> getEnlaces(){
		return enlaces;
	}
	/**
	*Retorna el nombre del nodo
	*@return String
	*/
	public String getNombre(){
		return nombre;
	}
	/**
	*Asocia nodos desde su nombre
	*@param nodoDestino nombre del nodo destino al que se asociara
	*@param costo costo de la asociacion
	*/
	public void agregarEnlace(String nodoDestino,double costo){
		if (asociacionesExistentes == -1){
			enlaces.add(new Asociacion(nodoDestino,costo));
			asociacionesExistentes++;
		}else{
			int posicion;		
			posicion = existeEnlace(nodoDestino); //verifico que este nodo ya tenga asociado este nodo destino
			if (posicion == -1){
				enlaces.add(new Asociacion(nodoDestino,costo));
				asociacionesExistentes++;
			}
		}
	}
	/**
	*Verifica que este nodo exista
	*@param nodoDestino nombre del nodo destino al que se asociara 
	*@return <code>-1</code> Si no existe tal asociacion y otro valor en el caso contrario
	*/
	public int existeEnlace(String nodoDestino){
		for (int i = 0; i < enlaces.size(); i++){
			Asociacion miEnlace;
			miEnlace = enlaces.get(i);
			if (miEnlace.getDestino().equals(nodoDestino))
				return i;
		}
		return -1;
	}
	/*
	*Retorna el nombre del vertice segun la posicion en vector
	*@deprecated  Es complicado saber en el vector que posicion ocupa cada asociacion
	*@return Nombre del Nodo destino
	*/
	public String VerticePosicion(int posi)
	{
		Asociacion miEnlace;
		miEnlace = enlaces.get(posi);
		return miEnlace.getDestino();
	}
	/**
	*retorna la cantidad de Asociaciones que existen
	*@deprecated  Dado que era para una vieja solucion 
	*/
	@Deprecated
	public int getasociacionesExistentes(){
		return asociacionesExistentes;
	}
	/**
	*Retorna el costo de la asociacion entre un Vertice y Otro
	*@deprecated  Es complicado saber en el vector que posicion ocupa cada asociacion
	*@return costo de la asocion
	*/
	@Deprecated
	public double enlacePosicion(int posi){
		Asociacion miEnlace;
		miEnlace = enlaces.get(posi);
		return miEnlace.getCosto();
	}

	/**
	*Elimina la asociacion entre un Vertice y Otro
	*@deprecated  Para que eliminar enlaces si no se puede modificar elementos
	*@return <code>true<code> Si lo pudo eliminar <code>false <code> Si no se pudo eliminar
	*/
	@Deprecated
	boolean eliminarEnlace(int posicion){
		if (posicion >= 0 && posicion <= enlaces.size()){
			enlaces.remove(posicion);
			asociacionesExistentes--;
			return true;
		}else
			JOptionPane.showMessageDialog(null, "No hay enlace en la posicion " + posicion); 
			return false;
	}
}
//Jefferson Amado Peña Torres

